home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / foomatic-replaceoldprinterids < prev    next >
Text File  |  2009-09-18  |  3KB  |  94 lines

  1. #!/usr/bin/perl
  2.  
  3. # This is foomatic-nonumericalids, it renames all printer entries with a
  4. # numerical ID and generates a translation table.
  5.  
  6. use Foomatic::Defaults;
  7. use Foomatic::DB;
  8.  
  9. # Read out the program name with which we were called, but discard the path
  10. $0 =~ m!/([^/]+)\s*$!;
  11. $progname = $1;
  12.  
  13. use Getopt::Std;
  14. getopts("r:l:t:h");
  15. if ($opt_h) {
  16.     print "
  17. foomatic-replaceoldprinterids [ -l <leftpattern> ] [ -r <rightpattern> ] \
  18.                               [ -t <transltable> ] file1 [ file2 ... ]
  19.  -l <leftpattern>:  Regular expresasion (Perl) which has to be matched 
  20.                     at the left side of the old printer ID (default:
  21.                     \"recnum=\")
  22.  -r <rightpattern>: Regular expresasion (Perl) which has to be matched 
  23.                     at the right side of the old printer ID (default:
  24.                     \"(?!\\d)\", this pattern means that on the right
  25.                     side should be no further digit, see \"man perlre\")
  26.  -t <transltable>:  Translation table, every line an old ID, white space,
  27.                     a new ID (default $libdir/db/oldprinterids)
  28.  file1, file2, ...  File(s) to be processed
  29.  
  30. ";
  31.     exit 0;
  32. }
  33.  
  34. my $leftpattern = 'recnum=';
  35. my $rightpattern = '(?!\d)';
  36. $leftpattern = $opt_l if defined($opt_l);
  37. $rightpattern = $opt_r if defined($opt_r);
  38. my %idhash;
  39. my $idtable = "$libdir/db/oldprinterids";
  40. $idtable = $opt_t if $opt_t;
  41. open IDTABLE, "< $idtable" ||
  42.     die "File $idtable cannot be read!\n";
  43. while (<IDTABLE>) {
  44.     if (/^\s*(\S+)\s+(\S+)\s*$/) {
  45.     $idhash{$1} = $2;
  46.     }
  47. }
  48. close IDTABLE;
  49.  
  50. my $changes = 0;
  51. my $chfiles = 0;
  52. my @chfilelist;
  53. while (my $file = shift @ARGV) {
  54.     print "Processing $file";
  55.     open FILE, "< $file" ||
  56.     die "File $file cannot be read!\n";
  57.     my @lines = <FILE>;
  58.     close FILE;
  59.     my $ch = 0;
  60.     for my $id (keys %idhash) {
  61.     foreach (@lines) {
  62.         if (s!($leftpattern)$id($rightpattern)!$1$idhash{$id}$2!g) {
  63.         $ch = 1;
  64.         $changes ++;
  65.         print ".";
  66.         }
  67.     }
  68.     }
  69.     print "\n";
  70.     next if !$ch;
  71.     open FILE, "> $file" ||
  72.     die "File $file cannot be written!\n";
  73.     print FILE join('', @lines);
  74.     close FILE;
  75.     print "   Wrote $file.\n";
  76.     $chfiles ++;
  77.     push(@chfilelist, "$file\n");
  78. }
  79.  
  80. # List of files changed
  81. $file = "modifiedfiles";
  82. open FILE, "> $file" ||
  83.     die "File $file cannot be written!\n";
  84. print FILE join('', @oldidlist, @chfilelist);
  85. close FILE;
  86. print "   Wrote $file.\n";
  87.  
  88. print "$changes changes on $chfiles files applied.\n";
  89.  
  90. exit 0;
  91.  
  92. # member( $a, @b ) returns 1 if $a is in @b, 0 otherwise.
  93. sub member { my $e = shift; foreach (@_) { $e eq $_ and return 1 } 0 };
  94.